package main

import "fmt"

// channel 管道
func main() {

	// 创建管道
	ch := make(chan int, 3)

	// 给管道存储数据
	ch <- 1

	// 获取管道内容
	fmt.Println(<-ch)

	// 管道类型
	fmt.Printf("%T\n", ch)

	// 管道容量，长度
	fmt.Println(cap(ch))
	fmt.Println(len(ch))

	// 管道阻塞
	ch <- 2
	ch <- 3

	fmt.Println(<-ch) // fatal error: all goroutines are asleep - deadlock!

	// 关闭管道
	close(ch)
	// 通过for range 遍历管道 必须先关闭管道
	fmt.Println("===========演示==========")
	// 演示
	ch1 := make(chan int, 10)
	for i := 0; i < 10; i++ {
		ch1 <- i
	}
	close(ch1)
	for v := range ch1 {
		fmt.Println(v)
	}

}
